Object description languages are generally used to describe objects using a formalized set of rules and syntax. The objects described by the language may be tangible (e.g. people, things) or more abstract (e.g. Web sites, data). The language itself is typically designed to be read by a machine, and therefore, typically formatted in a computer readable form such as ASCII text.
Various object description languages known in the art, include Trivial Object Description Language (TODL), Extensible Markup Language (XML), Resource Description Framework (RDF), Knowledge Interchange Format (KIF), etc. Automated systems may use these languages to store and exploit knowledge. In particular, these languages can exploit knowledge represented as distributed data accessible on the Internet.
Object description languages are used for communicating information using simple descriptive statements. The languages may be used to serialize program data structures, database contents, or any other basic information. In general, the languages use identifiers such as a text descriptor or uniform resource identifier (URI) to reference any given object. In an RDF statement, for example, a specific URI known as the “subject” is used to provide a reference to the object. In one sense, the RDF subject may be considered the name or identifier of the object, at least for purposes of accessing its attributes in RDF.
In a knowledge database such as an RDF data store, the identifier for an object may be assigned when the RDF statements describing the objects are created, and remains constant throughout the lifetime of the object. Sometimes the identifier is a particular URI/URL specified by the user. At other times, as in the case of a blank node identifier (or bNode), the identifier is computer-generated. In either case, the identifier does not change as new statements regarding the object are added. This is efficient for storage/manipulation, and is desirable for cases where the most recent version of an object is desired.
However, in some cases, the use of typical identifiers may be problematic. For example, if a computer program is repeatedly accessing distributed data that describes an object, it is important to know when the data might have changed. If the underlying structure and/or content of the object description has been altered, then programs that access that data may produce errors or fail. Similarly, in situations when some of the distributed data is mirrored or cached, there may be no way to tell if the original data has changed (and thus the cache is out of date) without additional information.